package com.example.work.controller;

import com.example.work.entity.TbCheckHosp;
import com.example.work.service.IHospService;
import com.example.work.utils.R;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: javaLiuwb
 * @date: 2024-11-25 19:30
 * @description: Controller for managing hospitals with pagination support.
 */
@RestController
@RequestMapping("/hosp")
public class HospController {

    @Autowired
    private IHospService hospService;

    /**
     * 获取医院列表（支持分页）
     *
     * @param page 当前页码（默认为 1）
     * @param size 每页大小（默认为 10）
     * @return 包含分页数据的响应结果
     */
    @GetMapping("/list")
    public R list(@RequestParam(value = "current", defaultValue = "1") int page,
                  @RequestParam(value = "size", defaultValue = "10") int size) {
        try {
            // 分页查询医院列表
            IPage<TbCheckHosp> hospPage = hospService.page(new Page<>(page, size));

            // 组装分页结果
            Map<String, Object> map = new HashMap<>();
            map.put("records", hospPage.getRecords()); // 当前页数据
            map.put("total", hospPage.getTotal()); // 总记录数
            map.put("pages", hospPage.getPages()); // 总页数
            map.put("current", hospPage.getCurrent()); // 当前页码
            map.put("size", hospPage.getSize()); // 每页大小

            return R.ok(map);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("获取列表失败：" + e.getMessage());
        }
    }

    /**
     * 保存或更新医院信息
     *
     * @param tbCheckHosp 医院数据
     * @return 操作结果
     */
    @PostMapping("/save")
    public R save(@RequestBody TbCheckHosp tbCheckHosp) {
        try {
            if (tbCheckHosp == null) {
                return R.error("提交的数据不能为空！");
            }

            Date date = new Date();
            if (tbCheckHosp.getId() == null) {
                // 设置创建时间和更新时间
                tbCheckHosp.setCreateTime(date);
                tbCheckHosp.setUpdateTime(date);
                hospService.save(tbCheckHosp);
            } else {
                // 设置更新时间
                tbCheckHosp.setUpdateTime(date);
                hospService.saveOrUpdate(tbCheckHosp);
            }
            return R.ok();
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("保存失败：" + e.getMessage());
        }
    }

    /**
     * 删除指定的医院信息
     *
     * @param id 医院的 ID
     * @return 删除结果
     */
    @RequestMapping("/delete/{id}")
    public R delete(@PathVariable(value = "id") String id) {
        try {
            if (id == null || id.isEmpty()) {
                return R.error("ID 不能为空！");
            }

            hospService.removeById(id);
            return R.ok();
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("删除失败：" + e.getMessage());
        }
    }
}